package com.shenshen.Unit;

import java.io.File;


public class FileUtil {
	
	/**
	* 功能：获取操作用户当前目录。
	*
	* @return 操作系统用户目录
	*/
	public static File getUserDir() {
		//TODO 实现代码
		/*
		 * Properties properties = System.getProperties(); properties.forEach((k,v)->{
		 * System.out.println(" k is :" + k + " val :" + v); });
		 */
		String fileName = System.getProperty("user.dir");
		
		return new File(fileName);
		
	}
	

	/**
	* 功能：获取操作系统用户目录。
	* 提示：Java系统属性中“user.home”是用户目录
	* @return 操作系统用户目录
	*/
	public static File getUserHomeDir() {
		//TODO 实现代码
		String fileName = System.getProperty("user.home");
		
		return new File(fileName);
	}
	
	
	/**
	* 功能：获取操作系统临时目录。
	*  提示：Java系统属性中“java.io.tmpdir”是操作系统临时目录
	* @return 操作系统临时目录
	*/
	public static File getTmpDir() {
		//TODO 实现代码
		String fileName = System.getProperty("java.io.tmpdir");
		
		return new File(fileName);
	}
	
	/**
	* 功能：获取一个文件的根目录
	* 举例：d:\temp\2020\04\abc.jpg → d:
	*
	* @param File file 文件名
	* @return 该文件的根目录
	*/
	public static File getRoot(File file) {
		//TODO 实现代码
		 String path = file.getAbsolutePath();
		 // 获取路径的第一个斜杠
		 int i = path.indexOf('\\');
		 System.out.println("i is " + i);
		 
		 String rootPath = path.substring(0,i);
		 System.out.println("rootpath is " + rootPath);
		 return new File(rootPath);
		 
	}
	
	/**
	* 功能：获取文件扩展名
	* 示例：a.jpg → .jpg   
	*
	* @param String fileName 文件名
	* @return 带点的扩展名
	*/
	public static String getFileExtensions(String fileName) {
		if(fileName==null)
			return "";
		
		//TODO 实现代码
		int indexOf = fileName.lastIndexOf('.');
		if(indexOf<0) {
			return "";
		}
		return fileName.substring(indexOf+1);
		
	}
	
	/**
	* 功能：获取对应单位的文件大小
	* 示例：a.jpg文件原始大小是1275个字节，如果参数单位是k，则返回2K，如果m，则返回0M   
	*
	* @param File file 文件
	* @param FileSizeUnit unit 单位，如K、M、G、T
	* @return 对应单位的文件大小
	*/
	public static long getFileSize(File file, FileSizeUnit unit) {
		//TODO 实现代码
		
		long space = file.length();
		switch (unit) {
		case B:
			return space;
		case K:
			return space/1024;
		case M:
			return space/1024/1024;
		case G:
			return space/1024/1024/1024;
		case T:
			return space/1024/1024/1024/1024;
		case P:
			return space/1024/1024/1024/1024/1024;
		default:
			return space;
		}
		
	}
	
	
	/**
	* 功能：获取某文件所在磁盘的总空间
	* 示例：如果传了d:\temp\a.jpg文件，能计算出d盘的总空间
	*
	* @param File file 文件
	* @param FileSizeUnit unit 单位，如K、M、G、T
	* @return 对应单位的文件大小
	*/
	public static long getTotalSpace(File file, FileSizeUnit unit) {
		//TODO 实现代码
		
		// 获取根目录
		File rootFile = getRoot(file);
		// 获取总空间
		long space = rootFile.getTotalSpace();
		switch (unit) {
		case B:
			return space;
		case K:
			return space/1024;
		case M:
			return space/1024/1024;
		case G:
			return space/1024/1024/1024;
		case T:
			return space/1024/1024/1024/1024;
		case P:
			return space/1024/1024/1024/1024/1024;
		default:
			return space;
		}
		
	}
	
	/**
	* 功能：获取磁盘的总空间
	*
	* @param FileSizeUnit unit 单位，如K、M、G、T
	* @return 对应单位的文件大小
	*/
	public static long getRootTotalSpace(FileSizeUnit unit) {
		
		// 获取所有的盘符
		 File[] roots = File.listRoots();
		 long space=0;
		 //每个盘符的总空间相加
		 for (File file : roots) {
			  space += file.getTotalSpace();
		}
		
		switch (unit) {
		case B:
			return space;
		case K:
			return space/1024;
		case M:
			return space/1024/1024;
		case G:
			return space/1024/1024/1024;
		case T:
			return space/1024/1024/1024/1024;
		case P:
			return space/1024/1024/1024/1024/1024;
		default:
			return space;
		}
		
	}
	
	/**
	* 功能：获取磁盘的总空间  作业
	*
	* @param FileSizeUnit unit 单位，如K、M、G、T
	* @return 磁盘的可用空间大小
	*/
	public static long getFreeSpace(FileSizeUnit unit) {
		//TODO 实现代码
		return 0;
	}
	
	
	/**
	* 功能：递归删除文件，如果是目录，则目录下所有的文件和子目录都删除。
	*
	* @param File file 文件或文件夹
	*/
	public static void deletes(File file) {
		//TODO 实现代码
		//文件不存在
		if(file==null || !file.exists())
			return;
		
		if(file.isFile()) {
			file.delete();
			return;
		}
		
		if(file.isDirectory()) {
			String[] list = file.list();
			for (String string : list) {
				// 得到子目录或者文件
				File subFile = new File(file.getAbsolutePath() + "\\" + string);
				deletes(subFile);//删除子目录或者文件
			}
			file.delete();
		}
	}


}
